static int xlide_hardsect_size[XLIDE_MAX];
static int xlide_max_sectors[XLIDE_MAX];
-struct gendisk *xlide_gendisk;
+struct gendisk *xlide_gendisk = NULL;
static struct block_device_operations xlide_block_fops =
{
int i, result, units, minors, disk;
struct gendisk *gd;
+ /* If we don't have any usable IDE devices we may as well bail now. */
+ units = 0;
+ for ( i = 0; i < xdi->count; i++ )
+ if ( IS_IDE_XENDEV(xdi->disks[i].device) &&
+ ((xdi->disks[i].device & XENDEV_IDX_MASK) < 16) ) units++;
+ if ( units == 0 ) return 0;
+
SET_MODULE_OWNER(&xlide_block_fops);
result = register_blkdev(XLIDE_MAJOR, XLIDE_MAJOR_NAME,
*/
blk_queue_headactive(BLK_DEFAULT_QUEUE(XLIDE_MAJOR), 0);
- /* If we don't have any usable IDE devices we may as well bail now. */
- units = 0;
- for ( i = 0; i < xdi->count; i++ )
- if ( IS_IDE_XENDEV(xdi->disks[i].device) &&
- ((xdi->disks[i].device & XENDEV_IDX_MASK) < 16) ) units++;
- if ( units == 0 ) return 0;
-
/* We may register up to 16 devices in a sparse identifier space. */
units = 16;
void xlide_cleanup(void)
{
+ if ( xlide_gendisk == NULL ) return;
+
blk_cleanup_queue(BLK_DEFAULT_QUEUE(XLIDE_MAJOR));
xlide_gendisk = NULL;
int i, result, units, minors, disk;
struct gendisk *gd;
+ /* If we don't have any usable SCSI devices we may as well bail now. */
+ units = 0;
+ for ( i = 0; i < xdi->count; i++ )
+ if ( IS_SCSI_XENDEV(xdi->disks[i].device) &&
+ ((xdi->disks[i].device & XENDEV_IDX_MASK) < 16) ) units++;
+ if ( units == 0 ) return 0;
+
SET_MODULE_OWNER(&xlscsi_block_fops);
result = register_blkdev(XLSCSI_MAJOR, XLSCSI_MAJOR_NAME,
*/
blk_queue_headactive(BLK_DEFAULT_QUEUE(XLSCSI_MAJOR), 0);
- /* If we don't have any usable SCSI devices we may as well bail now. */
- units = 0;
- for ( i = 0; i < xdi->count; i++ )
- if ( IS_SCSI_XENDEV(xdi->disks[i].device) &&
- ((xdi->disks[i].device & XENDEV_IDX_MASK) < 16) ) units++;
- if ( units == 0 ) return 0;
-
/* We may register up to 16 devices in a sparse identifier space. */
units = 16;
void xlscsi_cleanup(void)
{
+ if ( xlscsi_gendisk == NULL ) return;
+
blk_cleanup_queue(BLK_DEFAULT_QUEUE(XLSCSI_MAJOR));
xlscsi_gendisk = NULL;
static int xlseg_hardsect_size[XLVIRT_MAX];
static int xlseg_max_sectors[XLVIRT_MAX];
-struct gendisk *xlsegment_gendisk;
+struct gendisk *xlsegment_gendisk = NULL;
static xen_disk_info_t xlseg_disk_info;
static void __exit xlseg_cleanup(void)
{
+ if ( xlsegment_gendisk == NULL ) return;
+
blk_cleanup_queue(BLK_DEFAULT_QUEUE(XLVIRT_MAJOR));
xlsegment_gendisk = NULL;